#ifndef JUEGO_H
#define JUEGO_H

#include "Escenario.h"
#include "Jugador.h"
#include "Nivel.h"
#include <stack>
#include "../common/Thread.h"
#include <sigc++/signal.h>
class Juego : public Thread 
{
private:
	Escenario *escenario;
	std::vector<Jugador*> jugadores;
	short IDJugadores;
	short nivel;
	size_t tiempo;
	bool ganada;
	bool detectarImpactos;
	bool estado;
public:
	// Instancia un juego para n jugadores
	Juego(short cantidadJugadores);
	virtual ~Juego(void);
	// Agrega un objeto al juego
	void cargarObjeto(Objeto *obj);
	// De existir un objeto con el id ingresado, lo mata
	void matarObjeto(short id);
	// Agrega los objetos del nivel al juego
	void cargarNivel(Nivel *n);
	// Comienza la vida del juego
	void iniciar();
	// El jugador con el id ingresdo lanza un huevo
	void lanzarHuevo(short idJugador,short velX, short velY);
	// Retorna los ids de los jugadores creados
	std::stack<short> getIdJugadores();
	Escenario *getEscenario();
	
	void ejecutar();
	void noDetectarImpactos();
	// Detiene el juego, se utiliza para detener el modelo local 
	// en una partida multijugador
	void detenerJuego(bool partidaGanada);
	std::string getPuntos();
	
	sigc::signal<void, short> eventoPerdida;
	sigc::signal<void, short> eventoGanada;
};

#endif
